package clases.academico;

import CapaDatos.DataSource;
import CapaDatos.Sql;
import global.Dialogos;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class PeriodoCurso1 extends PeriodoLectivo {

    private int idcursoperiodo;
    private String sql;
    private DataSource dt;

    public int getIdcursoperiodo() {
        return idcursoperiodo;
    }

    public void setIdcursoperiodo(int idcursoperiodo) {
        this.idcursoperiodo = idcursoperiodo;
    }

    public PeriodoCurso1() {
        dt = new DataSource();

    }

    public boolean ExistenciaAsignacionCurso(String curso, String periodo) {
        sql = "SELECT * FROM PERIODOCURSO WHERE IDCURSO IN \n"
                + "(SELECT IDCURSO FROM CURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "WHERE CONCAT(CURSO,' ',PARALELO)='" + curso + "')\n"
                + "AND IDPERIODO IN (SELECT IDPERIODO FROM PERIODO "
                + "WHERE PERIODO='" + periodo + "')";
        
        return Sql.isExiste(sql);
    }

    public boolean guardarAsignacionCurso() {
        this.idcursoperiodo = Sql.getMax("IDPERIODOCURSO", "PERIODOCURSO", true);
        sql = "INSERT INTO PERIODOCURSO VALUES (" + this.idcursoperiodo + ", "
                + "" + this.getIdcurso() + ", " + this.getIdperiodo() + ")";
        if (Sql.insertar(sql) == true) {

            return true;
        } else {

            return false;
        }
    }

    public void ConsultaPeriodoCurso(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("CURSO");
        modelo.addColumn("TIPO CURSO");
        modelo.addColumn("PERIODO LECTIVO");
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(300);
        sql = objPaginacion.getPaginacion(sql, pagina, 25);
        Sql.getConsulta(sql, dt);

        String[] fila;

        while (dt.next()) {
            fila = new String[3];
            fila[0] = dt.getString(1);
            fila[1] = dt.getString(2);
            fila[2] = dt.getString(3);
            modelo.addRow(fila);

        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public void CursoAsignados(JList lista, DefaultListModel modelo, String periodo) {
        sql = "SELECT CONCAT(CURSO,' ', PARALELO) FROM CURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "WHERE IDCURSO IN (SELECT IDCURSO FROM PERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "WHERE PERIODO='" + periodo + "')";
        //System.out.println(sql);
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            modelo.addElement(dt.getString(1));
            lista.setModel(modelo);
        }
        lista.setSelectedIndex(0);
    }

    public void CursoNoAsignados(JList lista, DefaultListModel modelo, String periodo) {
        sql = "SELECT CONCAT(CURSO,' ', PARALELO) FROM CURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "WHERE IDCURSO NOT IN (SELECT IDCURSO FROM PERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "WHERE PERIODO='" + periodo + "')";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            modelo.addElement(dt.getString(1));
            lista.setModel(modelo);
        }
        lista.setSelectedIndex(0);
    }

    public void listarCursoActivoCombo(JComboBox cbo) {
        cbo.removeAllItems();
        cbo.addItem("--Seleccione--");
        sql = "SELECT CONCAT(CURSO,' ', PARALELO) FROM CURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "WHERE IDCURSO IN (SELECT IDCURSO FROM PERIODOCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "WHERE ESTADO=TRUE) "
                + "ORDER BY(CONCAT(CURSO,' ', PARALELO))";

        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            cbo.addItem(dt.getString(1));
        }
        cbo.setSelectedIndex(0);

    }

    public void listarCursoActivoCombo(JComboBox cbo, String periodo) {
        cbo.removeAllItems();
        cbo.addItem("--Seleccione--");
        sql = "SELECT CONCAT(CURSO,' ', PARALELO) FROM CURSO \n"
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO\n"
                + "WHERE PERIODO='" + periodo + "' "
                + "ORDER BY(CONCAT(CURSO,' ', PARALELO))";
        
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            cbo.addItem(dt.getString(1));
        }
        cbo.setSelectedIndex(0);

    }

    public boolean EliminarCursosAsignados(String curso, String periodo) {
        sql = "DELETE FROM PERIODOCURSO WHERE IDCURSO IN \n"
                + "(SELECT IDCURSO FROM CURSO "
                + "JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO "
                + "WHERE CONCAT(CURSO,' ',PARALELO)='" + curso + "')\n"
                + "AND IDPERIODO IN (SELECT IDPERIODO FROM PERIODO "
                + "WHERE PERIODO='" + periodo + "')";

        if (Sql.eliminar(sql) == true) {
            return true;
        } else {
            Dialogos.Error("Error al elminar la asignacion");
            return false;
        }
    }

    public boolean EliminarAsignacion(String curso, String periodo) {
        if (this.ExistenciaAsignacionCurso(curso, periodo) == false) {
            return false;
        } else if (this.QuitarCurso(curso, periodo) == false) {
            return false;
        } else if (global.Mensajes.mostrarPregunta("¿Realmente desea eliminar la asignación?") == true) {
            if (EliminarCursosAsignados(curso, periodo) == true) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public boolean QuitarCurso(String curso, String periodo) {
        if (Sql.isExiste("SELECT * FROM CURSO JOIN PARALELO "
                + "ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "WHERE IDPERIODOCURSO IN (SELECT IDPERIODOCURSO "
                + "FROM MATERIAPERIODOCURSO) \n"
                + "AND CONCAT(CURSO,' ',PARALELO)='" + curso + "' "
                + "AND PERIODO='" + periodo + "'") == true) {
            global.Mensajes.mostrarMensaje("Advertencia!", "El curso " + curso + " tiene materias asignadas... No se puedes quitar", 3);
            return false;
        } else if (Sql.isExiste("SELECT * FROM CURSO JOIN PARALELO ON PARALELO.IDPARALELO=CURSO.IDPARALELO \n"
                + "JOIN PERIODOCURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO \n"
                + "WHERE IDPERIODOCURSO IN (SELECT IDPERIODOCURSO FROM MATRICULACURSO)\n"
                + "AND TIPO='ESPECIAL' AND CONCAT(CURSO,' ',PARALELO)='" + curso + "'") == true) {
            global.Mensajes.mostrarMensaje("Advertencia!", "El curso " + curso + " tiene alumnos matriculados... No se puedes quitar", 3);
            return false;
        } else {
            return true;
        }
    }

    public void listarTipoCursos(JComboBox combo, boolean estado) {
        String tipo = "";
        if (estado == true) {
            tipo = "";
        } else {
            tipo = "!";
        }
        sql = "SELECT CONCAT (CURSO, ' ', PARALELO) AS CURSO FROM CURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "WHERE EXISTS (SELECT PERIODOCURSO.IDCURSO "
                + "FROM PERIODOCURSO JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "WHERE PERIODOCURSO.IDCURSO=CURSO.IDCURSO AND ESTADO=TRUE)"
                + "AND TIPO" + tipo + "='NORMAL' ORDER BY(CONCAT(CURSO,' ', PARALELO))";

        combo.removeAllItems();
        combo.addItem("--Seleccione--");
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            combo.addItem(dt.getString(1));
        }
        combo.setSelectedIndex(0);
    }

    public void sacarIdCursoAsignado(String curso) {
        sql = "SELECT IDPERIODOCURSO FROM PERIODOCURSO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "WHERE CONCAT (CURSO, ' ', PARALELO)='" + curso + "' AND ESTADO=TRUE";
       
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idcursoperiodo = dt.getInt(1);
        }
    }

    public void sacarIdCursoAsignado(String curso, String periodo) {
        sql = "SELECT IDPERIODOCURSO FROM PERIODOCURSO "
                + "JOIN CURSO ON CURSO.IDCURSO=PERIODOCURSO.IDCURSO "
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO "
                + "WHERE CONCAT (CURSO, ' ', PARALELO)='" + curso + "' "
                + "AND PERIODO='" + periodo + "'";
        System.out.println(sql);
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idcursoperiodo = dt.getInt(1);
        }
    }

    public String SqlPeriodoCurso() {
        sql = "SELECT DISTINCT CONCAT(CURSO,' ',PARALELO), TIPO, PERIODO FROM PERIODOCURSO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO\n"
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "ORDER BY(CONCAT(CURSO,' ', PARALELO))";
        return sql;
    }

    public String SqlPeriodoCursoCurso(String curso) {
        sql = "SELECT DISTINCT CONCAT(CURSO,' ',PARALELO), TIPO, PERIODO FROM PERIODOCURSO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO\n"
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "WHERE CONCAT(CURSO,' ',PARALELO) LIKE ('" + curso + "%') "
                + "ORDER BY(CONCAT(CURSO,' ', PARALELO))";
        return sql;
    }

    public String SqlPeriodoCursoTipo(String tipo) {
        sql = "SELECT DISTINCT CONCAT(CURSO,' ',PARALELO), TIPO, PERIODO FROM PERIODOCURSO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO\n"
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "WHERE TIPO='" + tipo + "' ORDER BY(CONCAT(CURSO,' ', PARALELO))";
        return sql;
    }

    public String SqlPeriodoCursoPeriodo(String periodo) {
        sql = "SELECT DISTINCT CONCAT(CURSO,' ',PARALELO), TIPO, PERIODO FROM PERIODOCURSO \n"
                + "JOIN CURSO ON PERIODOCURSO.IDCURSO=CURSO.IDCURSO \n"
                + "JOIN PERIODO ON PERIODO.IDPERIODO=PERIODOCURSO.IDPERIODO\n"
                + "JOIN PARALELO ON CURSO.IDPARALELO=PARALELO.IDPARALELO "
                + "WHERE PERIODO='" + periodo + "' ORDER BY(CONCAT(CURSO,' ', PARALELO))";
        return sql;
    }
}
